package middleware

import (
	"strings"

	"github.com/beego/beego/v2/server/web/context"
)

func validateToken(token string) (bool, bool) {
	// 这里应该实现token的验证逻辑
	// 简单起见，这里只是示例
	// 实际应用中应该验证token的有效期和合法性
	if token == "" {
		return false, false
	}

	// 这里可以解析token，判断是否是第二密码登录
	// 简单示例，实际应该根据token内容判断
	isSecondPassword := strings.HasSuffix(token, "2")
	return true, isSecondPassword
}

func AuthMiddleware(ctx *context.Context) {
	// 处理 OPTIONS 请求
	if ctx.Request.Method == "OPTIONS" {
		return
	}

	// 跳过登录接口和静态文件的认证
	if !strings.HasPrefix(ctx.Request.URL.Path, "/api/") ||
		ctx.Request.URL.Path == "/api/login" {
		return
	}

	// 从请求头获取token
	token := ctx.Input.Header("Authorization")
	if strings.HasPrefix(token, "Bearer ") {
		token = token[7:] // 去掉"Bearer "前缀
	}

	// 验证token
	isValid, isSecondPassword := validateToken(token)
	if !isValid {
		ctx.Output.JSON(map[string]interface{}{
			"success": false,
			"message": "未登录或token无效",
		}, true, false)
		return
	}

	// 将认证信息存储到上下文
	ctx.Input.SetData("isSecondPassword", isSecondPassword)
}
